home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Spanish Scene 1
/
SpanishScene1.iso
/
spanish pack n°1 by llfb
/
--llfb--
/
programas
/
sources1.dms
/
sources1.adf
/
SOURCES
/
Vectores
/
Multi_Vector.ASM
< prev
next >
Wrap
Assembly Source File
|
1996-06-04
|
17KB
|
515 lines
;MULTIRAYFILL CODED BY LADO OF FI-RE CREW !!!!!
; org $25000
; load $25000
Section Roman,code_c
; >extern 'DF0:raytr.dat',sinus
j lea $30000,a0 ;memoria torlese
lo clr.l (a0)+
cmp.l #$50000,a0
bcs.s lo
lea $dff000,a6 ;custom
ujn move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$131,d0
bne.s ujn
move.w #$7fff,$96(a6) ;clear DMACON
move.w #$7fff,$9a(a6) ;clear INTENA
move.l #copper,$84(a6)
clr.w $8a(a6) ;start copper
move.w #$87c0,$96(a6) ;DMACON
move.w #$c010,$9a(a6)
h1 bsr wait ;waitblitter
h2 move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$d0,d0
bne.s h2
bsr filler
btst #6,$bfe001
bne.s h1
bsr wait
move.w #$7fff,$96(a6)
move.w #$7fff,$9a(a6)
clr.w $88(a6) ;start original copper
move.w #$87f0,$96(a6)
move.w #$e02c,$9a(a6)
clr.l d0
rts ;END
;********************* nagy kockahoz tartozo szogek novelese ***********
;********************* 2D x,y koordinatak kiszamolasa ******************
filler addq.w #4,addx ;big cube xszog novelese
and.w #$1fe,addx
addq.w #4,addy ;big cube yszog novelese
and.w #$1fe,addy
addq.w #2,addz ;big cube zszog novelese
and.w #$1fe,addz
clr.w pack ;ne mentse el a 3d koordinatakat
lea coords1(pc),a0 ;kocka pontjainak x,y,z koordinatai
lea tarolo1(pc),a2 ;2D x,y letarolasa
lea addx(pc),a4 ;big cube angles
moveq #7,d7 ;8 pont van /kocka/
bsr calcord
;******************* kis kockahoz tartozo szogek novelese *************
;******************* atmeneti 3D x,y,z coords meghat. *****************
addq.w #6,addx2 ;kis cube x2szog novelese
and.w #$1fe,addx2
subq.w #2,addy2 ;kis cube y2szog novelese
and.w #$1fe,addy2
addq.w #2,addz2 ;kis cube z2szog novelese
and.w #$1fe,addz2
move.w #1,pack ;el kell menteni a 3d x,y,z-t
lea coords2(pc),a0
lea tarolo2(pc),a2 ;2D x,y letarolasa
lea addx2(pc),a4 ;kis kocka angles
moveq #7,d7 ;8 pont van /kocka/
bsr calcord
;*********************** kepernyo csere *************************
;*********************** kepernyo torles ************************
move.l #$ffff8000,$72(a6) ;vonalhuzashoz standard ertekek
move.l #-1,$44(a6)
move.w #160,$60(a6) ;kepernyo szelessege
eor.w #$8000,erno+2 ;kepernyo csere
eor.w #$8000,copscr ;csere a copperben is
eor.w #$8000,copscr+4
eor.w #$8000,copscr+8
eor.w #$8000,copscr+12
move.l erno(pc),a0 ;aktualis kepernyo
add.l #30+[190*$a0],a0 ;az big cube jobb also sarka
bsr wait ;blt ready ?
move.l #$01000002,$40(a6) ;USE D DESC
move.w #$28-[[13*16]/8],$66(a6) ;modulo $28-((Xsize*16)/8)
move.l a0,$54(a6) ;D cel
move.w #$b30d,$58(a6)
;********************** negy kocka eleinek megrajzolasa *************
lea tarolo1(pc),a1 ;2D x,y ertekek
lea meghat1(pc),a2 ;structure
lea sinus+$400(pc),a3 ;sor kezdopontja /0-f/ + $a4a or $b4a
lea sinus+$680(pc),a5 ;szelesseg/2/ es vonal hossz values
clr.b muti
move.w (a2)+,lap ;lapok szama /6/
h7 move.l (a2)+,d7 ;hany pontot kosson ossze
move.l (a2)+,a4 ;oszzekotesi sorrend
move.l (a2)+,scr ;melyik kepernyore
move.l (a2)+,col ;mutato a szinpalettara,melyik szin a copp.
move.l (a2)+,const ;mely tengely allando /100 or -100/
move.l erno(pc),a0 ;ide rajzol
movem.w (a4),d0/d1/d2 ;lathatosag eldontese
move.w (a1,d1.w),d3 ;x1
sub.w (a1,d0.w),d3 ;X1-X0
move.w 2(a1,d2.w),d4 ;y2
sub.w 2(a1,d1.w),d4 ;Y2-Y1
move.w 2(a1,d1.w),d5 ;y1
sub.w 2(a1,d0.w),d5 ;Y1-Y0
move.w (a1,d2.w),d6 ;x2
sub.w (a1,d1.w),d6 ;X2-X1
mulu d4,d3 ;(y2-y1)(x1-x0)=d3
mulu d6,d5 ;(y1-y0)(x2-x1)=d5
sub.w d5,d3
bmi.s vakon ;nem latszik
moveq #10,d5 ;1024
lsr.w d5,d3 ;d3=d3/1024
and.w #$1f,d3 ;also 5 bit levalasztasa
add.w d3,d3 ;word
add.w #6,d3
movem.l a0/a1,-(sp)
lea colors(pc),a0 ;szinek
lea copcol(pc),a1 ;copperben a szinek
add.w col(pc),a0 ;uj szin
add.w col+2(pc),a1 ;melyik szin a copperban
move.w (a0,d3.w),d3 ;uj szin bekerese
move.w d3,(a1)
movem.l (sp)+,a0/a1
move.w (a4)+,d5 ;1.pont
move.w (a1,d5.w),d0 ;x1 koordinata
move.w 2(a1,d5.w),d1 ;y1 koordinata
bsr lines ;vonalhuzo
bsr minor ;mely kis cube-k latszanak
vakon subq.w #1,lap ;lapszam csokkentes
bne.w h7 ;van meg ?
;**************** a kis kockak megrajzolasa **********************
lea tarolo3(pc),a0 ;kis kocka x,y bazis
btst #0,muti ;x=100 or x=-100
beq.s no1
lea 100(a0),a1 ;2d x,y coords /x allando !!
lea meghat3(pc),a2 ;vonalhuzas strukturaja
bsr second ;lathatosag+vonalhuzas
no1 lea 200(a0),a0 ;bazis+200
btst #1,muti ;y=100 or y=-100
beq.s no2
lea 100(a0),a1
lea meghat4(pc),a2
bsr second
no2 lea 200(a0),a0
btst #2,muti ;z=100 or x=-100
beq.s no3
lea 100(a0),a1
lea meghat2(pc),a2
bsr second
;**************** a cucc befillezese ***************************
no3 move.l erno(pc),a0 ;aktualis kepernyo
add.l #30+[190*$a0],a0 ;big cube jobb also sarka
bsr wait ;waitblitter
move.l #$09f00012,$40(a6) ;USE AD , LF:D=A , EFE , DESC
move.w #$28-[[13*16]/8],$64(a6)
move.w #$28-[[13*16]/8],$66(a6)
move.l a0,$50(a6)
move.l a0,$54(a6)
move.w #$b20d,$58(a6)
rts
;***************** kis kocka megrajzolasa *************************
second move.l a0,-(sp)
lea sinus+$400(pc),a3 ;sor kezdopontja /0-f/ + $a4a or $b4a
lea sinus+$680(pc),a5 ;szelesseg/2/ es vonal hossz values
move.w (a2)+,lap ;lapok szama
h77 move.l (a2)+,d7 ;hany pontot kosson ossze
move.l (a2)+,a4 ;oszzekotesi sorrend
move.l (a2)+,scr ;melyik kepernyore
move.l (a2)+,col ;mutato a szinpalettara,melyik szin a copp.
move.l erno(pc),a0 ;ide rajzol
movem.w (a4),d0/d1/d2 ;lathatosag eldontese
move.w (a1,d1.w),d3 ;x1
sub.w (a1,d0.w),d3 ;X1-X0
move.w 2(a1,d2.w),d4 ;y2
sub.w 2(a1,d1.w),d4 ;Y2-Y1
move.w 2(a1,d1.w),d5 ;y1
sub.w 2(a1,d0.w),d5 ;Y1-Y0
move.w (a1,d2.w),d6 ;x2
sub.w (a1,d1.w),d6 ;X2-X1
mulu d4,d3 ;(y2-y1)(x1-x0)=d3
mulu d6,d5 ;(y1-y0)(x2-x1)=d5
sub.w d5,d3
bmi.s vak ;nem latszik
moveq #8,d5 ;256
lsr.w d5,d3 ;d3=d3/256
and.w #$1f,d3 ;also 5 bit levalasztasa
add.w d3,d3 ;word
add.w #6,d3
movem.l a0/a1,-(sp)
lea colors(pc),a0 ;szinek
lea copcol(pc),a1 ;copperben a szinek
add.w col(pc),a0 ;uj szin
add.w col+2(pc),a1 ;melyik szin a copperban
move.w (a0,d3.w),d3 ;uj szin bekerese
move.w d3,(a1)
movem.l (sp)+,a0/a1
move.w (a4)+,d5 ;1.pont
move.w (a1,d5.w),d0 ;x1 koordinata
move.w 2(a1,d5.w),d1 ;y1 koordinata
bsr lines ;vonalhuzo
vak subq.w #1,lap ;lapszam csokkentes
bne.w h77 ;van meg ?
move.l (sp)+,a0
rts
;********************** line ************************************
lines move.w (a4)+,d5 ;kovetkezo pont
move.w (a1,d5.w),d2 ;x2
move.w 2(a1,d5.w),d3 ;y2
movem.w d2/d3,-(sp) ;kovetkezo pont latarolasa
cmp.w d1,d3 ;y2-y1
bgt.s p1
exg d0,d2 ;kisebb --> coords csere
exg d1,d3 ;mindig a nagyobb y-bol kell huzni !
beq.s not
p1 move.w #160,d5 ;kepernyo szelessege
move.w d1,d4 ;nagyobb y
mulu d5,d4 ;120*y = pont sora
move.w d0,d5 ;x0
add.l a0,d4 ;$30000+x0 = pont oszlopa
lsr.w #3,d5 ;pont sora/8
add.w d5,d4 ;megkapja a pont helyet
moveq #0,d5
sub.w d1,d3 ;Y
sub.w d0,d2 ;X /x1-x2/
bpl.s p2
moveq #1,d5 ;x2 kisebb volt,a kapott X negativ
neg.w d2 ;most mar pozitiv X
p2 move.w d3,d1 ;Y
add.w d1,d1 ;2Y
cmp.w d2,d1 ;X-2Y
dbhi d3,p3 ;csokkenti Y-t ha
p3 move.w d3,d1 ;Y
sub.w d2,d1 ;Y-X
bpl.s p4
exg d2,d3 ;X csereje Y-al
p4 addx.w d5,d5
add.w d2,d2 ;2Y
move.w d2,d1 ;2Y
sub.w d3,d2 ;2Y-X
addx.w d5,d5
add.w d0,d0
move.w d2,d6
sub.w d3,d6
add.w d3,d3
ok move.w (a5,d3.w),d3 ;$58
move.w (a3,d0.w),d0 ;$40
move.b dat(pc,d5.w),d5 ;melyik siknyolcad
bsr okvonal ;vonalrajz
not movem.w (sp)+,d0/d1
dbf d7,lines
rts
dat dc.l $3431353,$b4b1757 ;siknyolcad
;*********** vonal meghuzasa a megadott kepernyon *********************
okvonal move.l d7,-(sp)
moveq #3,d7 ;4 lehetoseg
swap d2 ;a d2-ot felhasznalom
move.w scr+2(pc),d2 ;melyik kepernyore
loop lsr.w #1,d2 ;az also 3 bit donti el
bcc.s noo ;Carry=0 --> nem kell
bsr wait
swap d2 ;eredeti d2
move.w d2,$52(a6) ;2y-x
move.w d0,$40(a6) ;12-15-->sor kezdopontja /0-f/ + a4a
move.b d5,$43(a6) ;siknyolcad
move.l d4,$48(a6) ;vonal kezdocime
move.l d4,$54(a6) ;vonal kezdocime
move.w d1,$62(a6) ;2y
move.w d6,$64(a6) ;2y-2x
move.w d3,$58(a6) ;szelesseg=2 , magassag=vonal hossza
swap d2
noo add.l #$28,d4 ;kovetkezo kepernyo
dbf d7,loop
move.l (sp)+,d7
rts
;**************** 3D-->2D koordinatak kikalkulalasa ********************
calcord lea sinus(pc),a1 ;sinus ertekek
lea $80(a1),a3 ;cosinus ertekek
lea tarolo(pc),a5
h3 movem.w (a0)+,d0/d1/d6 ;x,y,z
move.w 4(a4),d5 ;Zszog
bsr calcul ;Z-rotation
move.w d0,d6 ;X tarolasa
move.w d3,d0 ;Y
move.w (a4),d5 ;Xszog
bsr calcul ;X-rotation
move.w d0,d6 ;uj Y tarolasa
move.w d3,d0 ;Z
move.w 2(a4),d5 ;Yszog
bsr calcul ;Y-rotation
exg d0,d3 ;X csere Z-vel Z=d3
tst.w pack
beq.s nosave
move.w d0,(a5)+
move.w d1,(a5)+
move.w d3,(a5)+
nosave moveq #11,d6 ;lekepezes 2D-re
move.w #$400,d2
sub.w d3,d2 ;$400-Z
muls d2,d0 ;z'*x
asr.l d6,d0 ;z'*x/2048=2D X
muls d2,d1 ;z'*y
asr.l d6,d1 ;z'*y/2048=2D Y
add.w #150,d0 ;X=X+150 kozepre a kepernyon
add.w #100,d1 ;Y=Y+100
move.w d0,(a2)+ ;2D X tarolasa
move.w d1,(a2)+ ;2D Y tarolasa
dbf d7,h3 ;8-szor
rts
calcul move.w (a3,d5.w),d4 ;cos ertek
move.w (a1,d5.w),d5 ;sin ertek
move.w d0,d2 ;c1
move.w d1,d3 ;c2
muls d4,d0 ;c1*cos(c0angle)
muls d5,d1 ;c2*sin(c0angle)
muls d4,d3 ;c2*cos(c0angle)
muls d5,d2 ;c1*sin(c0angle)
sub.l d1,d0 ;c1*cos(c0angle)-c2*sin(c0angle)
add.l d2,d3 ;c2*cos(c0angle)+c1*sin(c0angle)
add.l d0,d0
add.l d3,d3
swap d0 ;uj c1
swap d3 ;uj c2
move.w d6,d1
rts
;************* kis kocka 2D koordinatainak meghat. *******************
minor movem.l a1-a3/a5,-(sp)
moveq #0,d0
move.w const(pc),d6 ;100 or -100
move.w const+2(pc),d0 ;mely tengely const. x,y or z
bset d0,muti ;jelzobit ON
move.w d0,d1
lea tarolo3(pc),a0 ;work area
lea tarolo(pc),a1 ;kis cube kalkulalt 3d adatai
mulu #200,d0 ;3 kulon blokk lehet a const szerint
add.l d0,a0 ;vegso tarolo
move.l a0,a2
moveq #0,d2
moveq #23,d7 ;24 db 3d coord van
tova move.w (a1)+,(a0)+
cmp.b d1,d2 ;d1=0 -->minden X=100 or -100
bne.s nemez ;d1=1 -->minden Y=100 or -100
move.w d6,-2(a0) ;d1=2 -->minden Z=100 or -100
nemez addq.b #1,d2
cmp.b #3,d2
bne.s ect
moveq #0,d2
ect dbf d7,tova
move.l a2,a0 ;x,y,z coords
lea 100(a0),a2 ;tarolo
lea addx(pc),a4 ;elforgatas a big cube szerint is !!!
clr.w pack ;nem kell 3d x,y,z
moveq #7,d7
bsr calcord
nyet movem.l (sp)+,a1-a3/a5
rts
wait btst #$e,2(a6) ;waitblitter
bne.s wait
rts
;***********************************************************************
copper dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
dc.w $180,0,$108,$78,$10a,$78,$182
copcol dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0,$190,0,$192,0
dc.w $194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $e0,3,$e4,3,$e8,3,$ec,3,$e2
copscr dc.w 0,$e6,$28,$ea,$50,$ee,$78
dc.w $3001,$fffe,$100,$4200,$180,$ff0,$3101,$fffe,$180,$125
dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
dc.w $ffff,$fffe
;************************* object coords *************************
coords1 dc.w -100,100,100,100,100,100,100,-100,100,-100,-100,100
dc.w -100,100,-100,100,100,-100,100,-100,-100,-100,-100,-100
coords2 dc.w -50,50,50,50,50,50,50,-50,50,-50,-50,50
dc.w -50,50,-50,50,50,-50,50,-50,-50,-50,-50,-50
;******************** $26 a szinek tavolsaga !!!! **************
;0,$26,$4c,$72,$98,$be,$e4
;0001 --> alap
;0010 --) alap+40
;0100 --> alap+80
;1000 --> alap+120
;1:alap=$182/0 2:alap+40=$184/4 3:alap,alap+40=$186/8
;4:alap+80=$188/c 5:alap,alap+80=$18a/10
;6:alap+40,alap+80=$18c/14 7:alap,alap+40,alap+80=$18e/18
;8:alap+120=$190/1c 9:alap,alap+120=$192/20
;10:alap+40,alap+120=$194/24 11:alap,alap+40,alap+120=$196/28
;12:alap+80,alap+120=$198/2c
;13:alap,alap+80,alap+120=$19a/30 14:alap+40,alap+80,alap+120=$19c/34
;15:alap,alap+40,alap+80,alap+120=$19e/38
meghat1 dc.w 6
dc.l 3,kot1,1,$00e40000,$00640002 ;z=100 const.
dc.l 3,kot2,1,$00e40000,$ff9c0002 ;z=-100
dc.l 3,kot3,2,$00e40004,$00640000 ;x=100
dc.l 3,kot4,2,$00e40004,$ff9c0000 ;x=-100
dc.l 3,kot5,4,$00e4000c,$00640001 ;y=100
dc.l 3,kot6,4,$00e4000c,$ff9c0001 ;y=-100
meghat2 dc.w 6
dc.l 3,kot1,4,$00260010 ;alap,alap+80
dc.l 3,kot2,4,$00260010 ;alap,alap+80
dc.l 3,kot3,6,$00260018 ;alap,alap+40,alap+80
dc.l 3,kot4,6,$00260018 ;alap,alap+40,alap+80
dc.l 3,kot5,8,$00260020 ;alap,alap+120
dc.l 3,kot6,8,$00260020 ;alap,alap+120
meghat3 dc.w 6
dc.l 3,kot1,4,$00720014 ;alap+40,alap+80
dc.l 3,kot2,4,$00720014 ;alap+40,alap+80
dc.l 3,kot3,8,$00720024 ;alap+40,alap+120
dc.l 3,kot4,8,$00720024 ;alap+40,alap+120
dc.l 3,kot5,9,$00720028 ;alap+40,alap,alap+120
dc.l 3,kot6,9,$00720028 ;alap+40,alap,alap+120
meghat4 dc.w 6
dc.l 3,kot1,8,$00be002c ;alap+80,alap+120
dc.l 3,kot2,8,$00be002c ;alap+80,alap+120
dc.l 3,kot3,9,$00be0030 ;alap+80,alap,alap+120
dc.l 3,kot4,9,$00be0030 ;alap+80,alap,alap+120
dc.l 3,kot5,10,$00be0034 ;alap+80,alap+40,alap+120
dc.l 3,kot6,10,$00be0034 ;alap+80,alap+40,alap+120
kot1 dc.w 0,4,8,12,0
kot2 dc.w 16,28,24,20,16
kot3 dc.w 4,20,24,8,4
kot4 dc.w 0,12,28,16,0
kot5 dc.w 0,16,20,4,0
kot6 dc.w 12,8,24,28,12
; kek
colors dc.w 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,$11f,$22f,$33f
; piros
dc.w 0,$100,$200,$300,$400,$500,$600,$700,$800,$900,$a00,$b00
dc.w $c00,$d00,$e00,$f00,$f11,$f22,$f33
; zold
dc.w 0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
dc.w $f1,$f2,$f3
; sarga
dc.w 0,$110,$220,$330,$440,$550,$660,$770,$880,$990,$aa0,$bb0,$cc0
dc.w $dd0,$ee0,$ff0,$ff1,$ff2,$ff3
; lila
dc.w 0,$101,$202,$303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
dc.w $d0d,$e0e,$f0f,$f1f,$f2f,$f3f
; cyan
dc.w 0,$11,$22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
dc.w $1ff,$2ff,$3ff
; feher
dc.w 0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb
dc.w $ccc,$ddd,$eee,$fff,$fef,$fdf,$fcf
addx dc.w 0 ;xangle
addy dc.w 0 ;yangle
addz dc.w 0 ;zangle
addx2 dc.w 0 ;xangle
addy2 dc.w 0 ;yangle
addz2 dc.w 0 ;zangle
lap dc.w 0 ;siklapok szama/object
pack dc.w 0
muti dc.b 0
EVEN
const dc.l 0
scr dc.l 0 ;kepernyo
col dc.l 0 ;color , coppercolor
erno dc.l $38000 ;kepernyo
sinus incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
tarolo blk.w 100,0
tarolo1 blk.w 50,0
tarolo2 blk.w 50,0
tarolo3 blk.b 600,0